後面十天的 Streamlit 小專案會放在 GitHub 上,有興趣的朋友歡迎留言 or 來信討論,我的信箱是 nickchen1998@gmail.com。
今天我們要來製作對話紀錄下載的功能。
我們新增一個 module 用來存放製作檔案內容的相關函式,讓我們看一下這個 module 的內容:
combine_user_ai_messages():
這個函式會將使用者和 AI 的訊息組合在一起,並回傳一個 list,list 中的每個元素都是一個 dict,包含使用者的訊息、AI 的訊息和 AI 的參考資料。
import json
def combine_user_ai_messages(history):
combined_history = []
for i in range(0, len(history), 2):
user_message = history[i]['content'] if i < len(history) and history[i]['role'] == "user" else ""
ai_message = history[i + 1]['content'] if i + 1 < len(history) and history[i + 1]['role'] == "ai" else ""
references = history[i + 1].get('references', []) if i + 1 < len(history) and history[i + 1][
'role'] == "ai" else []
combined_history.append({
"user": user_message,
"ai": ai_message,
"references": references
})
return combined_history
export_history_to_json():
這個函式會將對話紀錄轉換成 JSON 格式的字串。
def export_history_to_json(history):
combined_history = combine_user_ai_messages(history)
# 返回 JSON 格式字串
return json.dumps(combined_history, ensure_ascii=False, indent=2)
接下來我們要針對下載按鈕做個小調整,當使用者點選下載後,我們要將對話紀錄下載下來,讓我們看一下下面這段程式:
...
with st.sidebar:
...
st.title("下載對話紀錄")
file_format_option = st.selectbox(
"請選擇要下載的檔案格式...",
("JSON",),
disabled=True
)
export_data = export_history_to_json(st.session_state['history'])
st.download_button("下載", export_data, "dialogue.json", mime="application/json"):
...
下方是我們點選下載按鈕後輸出的 json 內容:
[
{
"user": "經常拉肚子該怎麼辦?",
"ai": "根據過去的回覆,對於經常拉肚子的情況,建議您可以先採取清淡飲食,並配合藥物治療。如果症狀持續時間超過1到3個月,建議您前往胃腸科門診,讓醫師進行評估和檢查。此外,多吃蔬菜和水果,多攝取水分也有助於改善腸道健康。如果經過初步診治後仍有需要,可能需要進一步的檢查。請注意自己的健康狀況,及早就醫。",
"references": [
"重點整理:\n\n1. 建議先採取清淡飲食,並配合藥物治療。\n2. 如果腹瀉持續時間超過1到3個月,則需要進一步就醫檢查。",
"重點整理:\n\n1. 您的狀況是腸道習慣的改變,可能與之前的腹痛有關。\n2. 建議您前往胃腸科門診,讓醫師進行評估和檢查。\n3. 飲食建議:多吃蔬菜和水果,多攝取水分。\n4. 彰化醫院關心您的健康。",
"重點整理:\n\n1. 根據您的症狀,醫生認為您可能有功能性腸胃障礙。\n2. 建議您先接受腸胃科醫師的初步診治。\n3. 如果有需要,可能需要進一步的檢查。"
]
}
]
今天我們完成了對話紀錄下載的功能,明天我們要把這個小站台部署到 Streamlit 上,讓大家可以直接使用,敬請期待!